{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Ipoq5dkUZEI1"
   },
   "source": [
    "# 第15章 奇异值分解"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1.矩阵的奇异值分解是指将$m \\times n$实矩阵$A$表示为以下三个实矩阵乘积形式的运算\n",
    "$$A = U \\Sigma V ^ { T }$$\n",
    "\n",
    "其中$U$是$m$阶正交矩阵，$V$是$n$阶正交矩阵，$\\Sigma$是$m \\times n$矩形对角矩阵\n",
    "$$\\Sigma = \\operatorname { diag } ( \\sigma _ { 1 } , \\sigma _ { 2 } , \\cdots , \\sigma _ { p } ) , \\quad p = \\operatorname { min } \\{ m , n \\}$$\n",
    "其对角线元素非负，且满足$\\sigma _ { 1 } \\geq \\sigma _ { 2 } \\geq \\cdots \\geq \\sigma _ { p } \\geq 0$\n",
    "\n",
    "2.任意给定一个实矩阵，其奇异值分解一定存在，但并不唯一。\n",
    "\n",
    "3.奇异值分解包括紧奇异值分解和截断奇异值分解。紧奇异值分解是与原始矩阵等秩的奇异值分解，截断奇异值分解是比原始矩阵低秩的奇异值分解。\n",
    "\n",
    "4.奇异值分解有明确的几何解释。奇异值分解对应三个连续的线性变换：一个旋转变换，一个缩放变换和另一个旋转变换第一个和第三个旋转变换分别基于空间的标准正交基进行。\n",
    "\n",
    "5.设矩阵$A$的奇异值分解为$A = U \\Sigma V ^ { T }$，则有$$\\left. \\begin{array} { l } { A ^ { T } A = V ( \\Sigma ^ { T } \\Sigma ) V ^ { T } } \\\\ { A A ^ { T } = U ( \\Sigma \\Sigma ^ { T } ) U ^ { T } } \\end{array} \\right.$$\n",
    "\n",
    "即对称矩阵$A^TA$和$AA^T$的特征分解可以由矩阵$A$的奇异值分解矩阵表示。\n",
    "\n",
    "6.矩阵$A$的奇异值分解可以通过求矩阵$A^TA$的特征值和特征向量得到：$A^TA$的特征向量构成正交矩阵$V$的列；从$A^TA$的特征值$\\lambda _ { j }$的平方根得到奇异值$\\sigma _ { i } $,即$$\\sigma _ { j } = \\sqrt { \\lambda _ { j } } , \\quad j = 1,2 , \\cdots , n$$\n",
    "\n",
    "对其由大到小排列，作为对角线元素，构成对角矩阵$\\Sigma$;求正奇异值对应的左奇异向量，再求扩充的$A^T$的标准正交基，构成正交矩阵$U$的列。\n",
    "\n",
    "7.矩阵$A = [ a _ { i j } ] _ { m \\times n }$的弗罗贝尼乌斯范数定义为$$\\| A \\| _ { F } = ( \\sum _ { i = 1 } ^ { m } \\sum _ { j = 1 } ^ { n } ( a _ { i j } ) ^ { 2 } ) ^ { \\frac { 1 } { 2 } }$$在秩不超过$k$的$m \\times n$矩阵的集合中，存在矩阵$A$的弗罗贝尼乌斯范数意义下的最优近似矩阵$X$。秩为$k$的截断奇异值分解得到的矩阵$A_k$能够达到这个最优值。奇异值分解是弗罗贝尼乌斯范数意义下，也就是平方损失意义下的矩阵最优近似。\n",
    "\n",
    "8.任意一个实矩阵$A$可以由其外积展开式表示$$A = \\sigma _ { 1 } u _ { 1 } v _ { 1 } ^ { T } + \\sigma _ { 2 } u _ { 2 } v _ { 2 } ^ { T } + \\cdots + \\sigma _ { n } u _ { n } v _ { n } ^ { T }$$\n",
    "其中$u _ { k } v _ { k } ^ { T }$为$m \\times n$矩阵，是列向量$u _ { k }$和行向量$v _ { k } ^ { T }$的外积，$\\sigma _ { k }$为奇异值，$u _ { k } , v _ { k } ^ { T } , \\sigma _ { k }$通过矩阵$A$的奇异值分解得到。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "149N2eYfZLed"
   },
   "source": [
    "---\n",
    "任意一个$m$ x $n$ 矩阵，都可以表示为三个矩阵的乘积（因子分解）形式，分别是$m$阶**正交矩阵**，由**降序**排列的**非负**的对角线元素组成的$m$ x $n$ 矩形对角矩阵，和$n$阶**正交矩阵**，称为该矩阵的奇异值分解。矩阵的奇异值分解一定存在，但不唯一。  \n",
    "\n",
    "奇异值分解可以看作是矩阵数据压缩的一种方法，即用因子分解的方式近似地表示原始矩阵，这种近似是在平方损失意义下的最优近似。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "1i4xNylpaWVA"
   },
   "source": [
    "矩阵的奇异值分解是指，将一个非零的$m$ x $n$ **实矩阵**$A, A\\in R^{m\\times n}$表示为一下三个实矩阵乘积形式的运算：  \n",
    "$A = U\\Sigma V^{T}$,  \n",
    "其中 $U$ 是 $m$ 阶正交矩阵， $V$ 是 $n$ 阶正交矩阵，$\\Sigma$ 是由降序排列的非负的对角线元素组成的$m$ x $n$矩形对角矩阵。称为$A$ 的奇异值分解。 $U$的列向量称为左奇异向量， $V$的列向量称为右奇异向量。  \n",
    "\n",
    "奇异值分解不要求矩阵$A$ 是方阵，事实上矩阵的奇异值分解可以看作方阵的对角化的推广。  \n",
    "\n",
    "**紧奇奇异值分解**是与原始矩阵等秩的奇异值分解， **截断奇异值分解**是比原始矩阵低秩的奇异值分解。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "uAEFyqLD1Rbp"
   },
   "source": [
    "---------------------------------------------------------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "RaH0xqPcZB94"
   },
   "outputs": [],
   "source": [
    "# 实现奇异值分解， 输入一个numpy矩阵，输出 U, sigma, V\n",
    "# https://zhuanlan.zhihu.com/p/54693391\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "#基于矩阵分解的结果，复原矩阵\n",
    "def rebuildMatrix(U, sigma, V):\n",
    "    a = np.dot(U, sigma)\n",
    "    a = np.dot(a, np.transpose(V))\n",
    "    return a\n",
    "\n",
    "\n",
    "#基于特征值的大小，对特征值以及特征向量进行排序。倒序排列\n",
    "def sortByEigenValue(Eigenvalues, EigenVectors):\n",
    "    index = np.argsort(-1 * Eigenvalues)\n",
    "    Eigenvalues = Eigenvalues[index]\n",
    "    EigenVectors = EigenVectors[:, index]\n",
    "    return Eigenvalues, EigenVectors\n",
    "\n",
    "\n",
    "#对一个矩阵进行奇异值分解\n",
    "def SVD(matrixA, NumOfLeft=None):\n",
    "    #NumOfLeft是要保留的奇异值的个数，也就是中间那个方阵的宽度\n",
    "    #首先求transpose(A)*A\n",
    "    matrixAT_matrixA = np.dot(np.transpose(matrixA), matrixA)\n",
    "    #然后求右奇异向量\n",
    "    lambda_V, X_V = np.linalg.eig(matrixAT_matrixA)\n",
    "    lambda_V, X_V = sortByEigenValue(lambda_V, X_V)\n",
    "    #求奇异值\n",
    "    sigmas = lambda_V\n",
    "    sigmas = list(map(lambda x: np.sqrt(x)\n",
    "                      if x > 0 else 0, sigmas))  #python里很小的数有时候是负数\n",
    "    sigmas = np.array(sigmas)\n",
    "    sigmasMatrix = np.diag(sigmas)\n",
    "    if NumOfLeft == None:\n",
    "        rankOfSigmasMatrix = len(list(filter(lambda x: x > 0,\n",
    "                                             sigmas)))  #大于0的特征值的个数\n",
    "    else:\n",
    "        rankOfSigmasMatrix = NumOfLeft\n",
    "    sigmasMatrix = sigmasMatrix[0:rankOfSigmasMatrix, :]  #特征值为0的奇异值就不要了\n",
    "\n",
    "    #计算右奇异向量\n",
    "    X_U = np.zeros(\n",
    "        (matrixA.shape[0], rankOfSigmasMatrix))  #初始化一个右奇异向量矩阵，这里直接进行裁剪\n",
    "    for i in range(rankOfSigmasMatrix):\n",
    "        X_U[:, i] = np.transpose(np.dot(matrixA, X_V[:, i]) / sigmas[i])\n",
    "\n",
    "    #对右奇异向量和奇异值矩阵进行裁剪\n",
    "    X_V = X_V[:, 0:NumOfLeft]\n",
    "    sigmasMatrix = sigmasMatrix[0:rankOfSigmasMatrix, 0:rankOfSigmasMatrix]\n",
    "    #print(rebuildMatrix(X_U, sigmasMatrix, X_V))\n",
    "\n",
    "    return X_U, sigmasMatrix, X_V"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 143
    },
    "colab_type": "code",
    "id": "Hf9KqmH110KX",
    "outputId": "56ed2cdc-3f83-45eb-8c16-63881afee5a9"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 1, 1, 2, 2],\n",
       "       [0, 0, 0, 3, 3],\n",
       "       [0, 0, 0, 1, 1],\n",
       "       [1, 1, 1, 0, 0],\n",
       "       [2, 2, 2, 0, 0],\n",
       "       [5, 5, 5, 0, 0],\n",
       "       [1, 1, 1, 0, 0]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[1, 1, 1, 2, 2], [0, 0, 0, 3, 3], [0, 0, 0, 1, 1], [1, 1, 1, 0, 0],\n",
    "              [2, 2, 2, 0, 0], [5, 5, 5, 0, 0], [1, 1, 1, 0, 0]])\n",
    "\n",
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "Tmecvggl15Gn"
   },
   "outputs": [],
   "source": [
    "X_U, sigmasMatrix, X_V = SVD(A, NumOfLeft=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 143
    },
    "colab_type": "code",
    "id": "r9TbEba32HcQ",
    "outputId": "abfa62a2-3ea8-419b-eb08-209afaa5cea1"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.96602638e-01, -5.12980706e-01, -6.20066911e-09],\n",
       "       [ 3.08997616e-02, -8.04794293e-01,  1.69140901e-09],\n",
       "       [ 1.02999205e-02, -2.68264764e-01,  5.63803005e-10],\n",
       "       [ 1.76002797e-01,  2.35488225e-02, -7.63159275e-09],\n",
       "       [ 3.52005594e-01,  4.70976451e-02, -1.52631855e-08],\n",
       "       [ 8.80013984e-01,  1.17744113e-01, -3.81579637e-08],\n",
       "       [ 1.76002797e-01,  2.35488225e-02, -7.63159275e-09]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_U"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 71
    },
    "colab_type": "code",
    "id": "IoVH0RA32MxA",
    "outputId": "4b1ca501-7ce9-4cff-b929-150084bcd2fa"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[9.81586105e+00, 0.00000000e+00, 0.00000000e+00],\n",
       "       [0.00000000e+00, 5.25821946e+00, 0.00000000e+00],\n",
       "       [0.00000000e+00, 0.00000000e+00, 1.16381789e-07]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sigmasMatrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 107
    },
    "colab_type": "code",
    "id": "42ag3hPE2OBa",
    "outputId": "8fa214d1-3ec3-456e-8698-72c7e5ea5d8c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 5.75872999e-01,  4.12749590e-02,  8.16496581e-01],\n",
       "       [ 5.75872999e-01,  4.12749590e-02, -4.08248290e-01],\n",
       "       [ 5.75872999e-01,  4.12749590e-02, -4.08248290e-01],\n",
       "       [ 5.05512944e-02, -7.05297502e-01,  3.28082013e-17],\n",
       "       [ 5.05512944e-02, -7.05297502e-01,  3.28082013e-17]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_V"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 143
    },
    "colab_type": "code",
    "id": "1RHUFh0w2O0K",
    "outputId": "e6947501-4932-4c53-dee3-25dd38f542de"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.00000000e+00,  1.00000000e+00,  1.00000000e+00,\n",
       "         2.00000000e+00,  2.00000000e+00],\n",
       "       [ 5.39915464e-17,  7.72260438e-16, -7.54662738e-16,\n",
       "         3.00000000e+00,  3.00000000e+00],\n",
       "       [ 9.57429619e-18,  2.48997260e-16, -2.59977132e-16,\n",
       "         1.00000000e+00,  1.00000000e+00],\n",
       "       [ 1.00000000e+00,  1.00000000e+00,  1.00000000e+00,\n",
       "         1.25546281e-17,  1.25546281e-17],\n",
       "       [ 2.00000000e+00,  2.00000000e+00,  2.00000000e+00,\n",
       "         2.51092563e-17,  2.51092563e-17],\n",
       "       [ 5.00000000e+00,  5.00000000e+00,  5.00000000e+00,\n",
       "         9.74347659e-18,  9.74347659e-18],\n",
       "       [ 1.00000000e+00,  1.00000000e+00,  1.00000000e+00,\n",
       "         1.38777878e-17,  1.38777878e-17]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# rebuild from U, sigma, V\n",
    "\n",
    "rebuildMatrix(X_U, sigmasMatrix, X_V)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "c7FtRwkh2WlI"
   },
   "source": [
    "same as A."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 321
    },
    "colab_type": "code",
    "id": "r_5WIyV33P1H",
    "outputId": "ee629ad1-caca-4f8b-8b8b-4ddb7df88824"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=304x304 at 0x1492D887208>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from PIL import Image\n",
    "import requests\n",
    "from io import BytesIO\n",
    "\n",
    "url = 'https://images.mulberry.com/i/mulberrygroup/RL5792_000N651_L/small-hampstead-deep-amber-small-classic-grain-ayers/small-hampstead-deep-amber-small-classic-grain-ayers?v=3&w=304'\n",
    "response = requests.get(url)\n",
    "img = Image.open(BytesIO(response.content))\n",
    "img"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "本章代码来源：https://github.com/hktxt/Learn-Statistical-Learning-Method\n",
    "\n",
    "本文代码更新地址：https://github.com/fengdu78/lihang-code\n",
    "\n",
    "中文注释制作：机器学习初学者公众号：ID:ai-start-com\n",
    "\n",
    "配置环境：python 3.5+\n",
    "\n",
    "代码全部测试通过。\n",
    "![gongzhong](../gongzhong.jpg)"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "SVD.ipynb",
   "provenance": [],
   "version": "0.3.2"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
